package main

import (
	"context"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gcron"
	"os"
	"wxproxy/mylego"
)

var myLego = &mylego.LegoData{}

func initSslAuto() {
	if isSSlAuto {
		err := myLego.InitLego(email)
		if err != nil {
			g.Log().Error(ctx, err)
		}
		myLego.CertPath = g.Cfg().MustGet(ctx, "app.ssl_cert_path", "data/https/server.crt").String()
		myLego.KeyPath = g.Cfg().MustGet(ctx, "app.ssl_key_path", "data/https/server.key").String()
		if !FileExists(myLego.CertPath) {
			_ = os.MkdirAll("data/https", 0777)
			err := NewSSLCert()
			if err != nil {
				return
			}
		}
		_, _ = gcron.AddSingleton(ctx, ssl_cron, func(ctx context.Context) {
			err := ReNewSSLCert()
			if err != nil {
				return
			}
		})

	}
}

func NewSSLCert() error {
	g.Log().Info(ctx, "开始获取SSL证书")
	defer g.Log().Info(ctx, "SSL证书获取完成")
	cs, err := myLego.GetCertsByAliDns(domain, aliDnsKey, aliDnsSec)
	if err != nil {
		g.Log().Info(ctx, "获取证书失败："+err.Error())
		g.Log().Error(ctx, err)
		return err
	}
	err = myLego.SaveCerts(cs)
	if err != nil {
		g.Log().Info(ctx, "获取证书失败："+err.Error())
		g.Log().Error(ctx, err)
		return err
	}
	return nil
}
func ReNewSSLCert() error {
	//if 1 == 1 {
	//	return ReloadSSL()
	//}
	if !myLego.HasGetCerts {
		if err := NewSSLCert(); err != nil {
			return err
		}
		return ReloadSSL()

	}
	cs, err := myLego.ReNew(domain)
	if err != nil {
		g.Log().Error(ctx, err)
		return err
	}
	err = myLego.SaveCerts(cs)
	if err != nil {
		g.Log().Error(ctx, err)
		return err
	}
	return ReloadSSL()
}
func FileExists(file string) bool {
	fileStat, err := os.Stat(file)
	if os.IsNotExist(err) {
		return false
	}

	return !fileStat.IsDir()
}
